package com.terry.test3;

import java.util.*;

/**
 *
 * 【机器人走迷宫】
 *
 * 机器人走一个迷宫，给出迷宫的x和y(x*y的迷宫)并且迷宫中有障碍物,输入k表示障碍物有k个，并且会将障碍物的坐标挨个输入。
 *
 * 机器人从0,0的位置走到x,y的位置并且只能向x,y增加的方向走，不能回退，
 *
 * 如代码类注释展示的样子，#表示可以走的方格，0代表障碍，机器人从0,0的位置只能向下或者向前走到出口，
 *
 * 其中会有不可达方格和陷阱方格。
 *
 * 不可达方格为第四行前三个，该机器人在行走路径上不可能走到的方格，陷阱方格如第一行最后两个，走进之后则不能抵达终点。
 *
 * @author 小八
 * @date 2023年02月13日11:13
 */
class SinglePoint{
    public int x ;
    public int y ;
    public SinglePoint(int x,int y){
        this.x = x;
        this.y = y;
    }
}

public class Title30 {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] split = in.nextLine().split(" ");
        //X
        int X  = Integer.parseInt(split[0]);
        //Y
        int Y = Integer.parseInt(split[1]);
        //障碍物个数
        int N = Integer.parseInt(in.nextLine());
        int[][] arr = new int[X][Y];
        for (int i = 0; i < N; i++) {
            String[] temp = in.nextLine().split(" ");
            int x = Integer.parseInt(temp[0]);
            int y = Integer.parseInt(temp[1]);
            arr[x][y] = -1;
        }
        Deque<SinglePoint> pathList = new ArrayDeque<>();
        pathList.addLast(new SinglePoint(0,0));
        dfs(pathList,arr,0,0,X,Y);
        int xj = 0;
        int bkd = 0;
        for (int i = 0; i < X; i++) {
            for (int j = 0; j < Y; j++) {
               if(arr[i][j] == 0){
                   bkd++;
               }
                if(arr[i][j] == 1){
                    xj++;
                }
            }
        }
        System.out.println(xj+" "+bkd);
    }

    public static void dfs(Deque<SinglePoint> pathList,int [][] arr,int x,int y,int X,int Y){
        if(arr[x][y] == 0) {
            arr[x][y] = 1;
        }

        if(x== X-1 && y==Y-1){
            pathList.forEach(obj->{
                arr[obj.x][obj.y] = 2;
            });
            return ;
        }

        if(x+1<X && arr[x+1][y] >= 0){
          pathList.addLast(new SinglePoint(x+1,y));
            dfs(pathList,arr,x+1,y,X,Y);
          pathList.removeLast();
        }

        if(y+1<Y && arr[x][y+1] >= 0){
            pathList.add(new SinglePoint(x,y+1));
            dfs(pathList,arr,x,y+1,X,Y);
            pathList.removeLast();
        }
    }
}
//6 4
//5
//0 2
//1 2
//2 2
//4 1
//5 1

//0 0 -1 0
//0 0 -1 0
//0 0 -1 0
//0 0 0 0
//0 -1 0 0
//0 -1 0 0